package com.mida.app.report.utils;

import org.apache.commons.lang3.time.StopWatch;
import org.slf4j.Logger;

import java.util.HashMap;
import java.util.Map;

public class WatchUtil {
    public static Map<String, StopWatch> createWatchs(String ... ids){
        Map<String, StopWatch> watchMap = new HashMap<>();
        for(String id:ids) {
            StopWatch stopWatch = new StopWatch();
            watchMap.put(id, stopWatch);
        }
        return watchMap;
    }

    /**
     * 开始watchMap中的watch,如果指定的id不在 watchMap 中，则跳过，不报错。
     * @param watchMap
     * @param ids
     */
    public static void start(Map<String, StopWatch> watchMap,String ... ids){
        for(String id:ids) {
            StopWatch watch = watchMap.get(id);
            if(watch!=null) {
                watch.start();
            }
        }
    }

    /**
     * 开始 watchMap 中的所有 watch
     * @param watchMap
     */
    public static void startAll(Map<String, StopWatch> watchMap){
        for(String id:watchMap.keySet()) {
            watchMap.get(id).start();
        }
    }

    /**
     * 停止，并 log.info 输出所耗时间
     * @param log
     * @param watchMap
     * @param id
     */
    public static void stopAndLog(Logger log, Map<String, StopWatch> watchMap, String id){
        watchMap.get(id).stop();
        StopWatch stopWatch = watchMap.get(id);
        log.info("本次 "+id+" 耗时: " + stopWatch.getTime() + "ms");
    }

    /**
     * 停止 watchMap 中未停止的 watch,如果指定的id不在 watchMap 中，则跳过，不报错。
     * @param watchMap
     * @param ids
     */
    public static void stopAll(Map<String, StopWatch> watchMap,String ... ids){
        for(String id:ids) {
            StopWatch watch = watchMap.get(id);
            if(watch!=null) {
                if(!watch.isStopped()) {
                    watch.stop();
                }
            }
        }
    }

}
